package cn.sun.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor//全参构造
@NoArgsConstructor//无参构造
public class ResultVO<T> {
    private String code;
    private String message;
    private T data;

    /**
     * 请求成功，对返回结果进行封装
     */
    public static <T> ResultVO<T> success() {
        return build(CodeEnum.SUCCESS.code, CodeEnum.SUCCESS.message, null);
    }

    /**
     * 请求成功，对返回结果进行封装
     */
    public static <T> ResultVO<T> success(T data) {
        return build(CodeEnum.SUCCESS.code, CodeEnum.SUCCESS.message, data);
    }

    /**
     * 请求失败，对返回结果进行封装
     */
    public static <T> ResultVO<T> failed(String message) {
        return build(CodeEnum.FAIL.code, message, null);
    }

    /**
     * 请求失败，对返回结果进行封装
     */
    public static <T> ResultVO<T> failed(String message,T data) {
        return build(CodeEnum.FAIL.code, message, data);
    }

    /**
     * 请求失败，对返回结果进行封装
     */
    public static <T> ResultVO<T> failed(String message, String code) {
        return build(code, message, null);
    }

    /**
     * 返回结果统一封装
     */
    private static <T> ResultVO<T> build(String code, String message, T data) {
        ResultVO<T> vo = new ResultVO<>();
        // vo.setStatus(HttpStatus.OK.value());
        vo.setCode(code);
        vo.setMessage(message);
        vo.setData(data);
        return vo;
    }
}
